import Vue from 'vue';
import HomeView from './ProductDetailView.vue';

import { Loading } from 'element-ui';
import { getAsyncProductV2ProductViewInitData } from '@src/api/InitDataApi';
import qs from 'qs';
import platform from '@src/platform';

import VueTour from 'vue-tour';
import 'vue-tour/dist/vue-tour.css';
Vue.use(VueTour);

const componentItem = initData => {
  return {
    provide: {
      initData: Object.freeze(initData),
    },
    render(h) {
      return h(HomeView);
    },
  };
};

Vue.component('async-component', function(resolve) {
  // 需要加loading 打开此注释
  // const instance = Loading.service({ fullscreen: true });

  let query = qs.parse(window.location.search.substr(1));
  const id = window.location.pathname.split('/customer/product/view/')[1];
  const params = Object.assign({}, query, {id});

  getAsyncProductV2ProductViewInitData(params)
    .then(result => {
      let initJSON = '';
      try {
        if(result && result.data && result.data.initJson) {
          initJSON = typeof(result.data.initJson) === 'string' ? JSON.parse(result.data.initJson) : result.data.initJson
        }
      } catch (error) {
        console.error('initJSON 解析失败');
      }

      const initData = initJSON || {};
      const title = (result && result.data && result.data.title) || '';
      const isSuccess = result.succ || result.success;

      if (!isSuccess) {
        window.location.href = '/500';
        return;
      }

      try {
        window._init = JSON.stringify(initData);
      } catch (error) {
        console.error('initData 赋值失败');
      }

      // 需要加loading 打开此注释
      // instance.close();

      if (window.frameElement) {
        const currentTabId = window.frameElement.dataset.id;
        platform.setTabTitle({
          id: currentTabId,
          title
        })
      }
      resolve(componentItem(initData));
    })
    .catch(error => {
      window.location.href = '/500';
    });
});

let app = {
  render(h) {
    return <async-component />
  }
}

export default app;
